演算法:
1. 輸入 n
2. 印出 n
3. 如果 n = 1 結束
4. 如果 n 是奇數 那麼 3n+1
5. 否則 n/2
6. 回到 2.
給一數 n 根據演算法我們可以得到一組數列,這組數列的長度稱為 cycle-length
。
題目會給定兩數,求出兩數間(包含兩數)最長的 cycle-length
。
直接硬爆就好了,求出範圍間所有的 cycle-length
,找出最大的。
#include <bits/stdc++.h>
using namespace std;
int len(int i) {
int leng=1;
while(i!=1){
if (i & 1)
i = i * 3 + 1;
else
i /= 2;
leng++;
}
return leng;
}
int main() {
int a, b;
while (cin >> a >> b) {
int ans = 0;
cout << a << " " << b << " ";
for (int i = min(a, b); i <= max(a, b); i++) {
ans = max(len(i), ans);
}
cout << ans << endl;
}
return 0;
}
判斷是否為 11 的倍數。
因為題目說最大可能到 1000 位數,所以我們用 string
存,然後判斷是否為 11 的倍數。
#include <bits/stdc++.h>
using namespace std;
int main() {
string num;
while (cin >> num,num!="0") {
int odd = 0, even = 0;
bool k=0;
for(int i=0;i<num.size();i++) {
if(i%2==0)
odd=odd+(num[i]-'0');
else
even=even+(num[i]-'0');
}
int ans;
ans = abs(odd - even);
if (ans % 11)
cout << num << " is not a multiple of 11." << endl;
else
cout << num << " is a multiple of 11." << endl;
}
return 0;
}